//package com.preparation.service.impl;
//
//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
//import com.baomidou.mybatisplus.core.metadata.IPage;
//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
//import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
//import com.preparation.domain.Post;
//import com.preparation.domain.Video;
//import com.preparation.domain.VideoSet;
//import com.preparation.mapper.VideoMapper;
//import com.preparation.mapper.VideoSetMapper;
//import com.preparation.service.IVideoService;
//import org.apache.logging.log4j.util.Strings;
//import org.bytedeco.javacv.FFmpegFrameGrabber;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.stereotype.Service;
//
//import java.io.File;
//import java.io.IOException;
//import java.util.Date;
//import java.util.List;
//
//@Service
//public class VideoServiceImpl extends ServiceImpl<VideoMapper, Video> implements IVideoService {
//
//    @Autowired
//    private VideoMapper videoMapper;
//
//    @Autowired
//    private VideoSetMapper videoSetMapper;
//
//    @Value("${videos.path}")
//    private String basePath;
//
//    //分页条件查询
//    @Override
//    public IPage<Video> getPage(int currentPage, int pageSize, Video video) {
//        LambdaQueryWrapper<Video> qw = new LambdaQueryWrapper<>();
//
//        //条件查询
//        qw.eq(video.getId()!=null && video.getId()>0, Video::getId, video.getId());
//        qw.eq(video.getSetId()!=null && video.getSetId()>0, Video::getSetId, video.getSetId());
//        qw.like(Strings.isNotEmpty(video.getVideoTitle()), Video::getVideoTitle, video.getVideoTitle());
//
//        //判断是否需要根据序号排序
//        if (video.getNumber()!=null){
//            if(video.getNumber()==1){
//                qw.orderByDesc(Video::getNumber);
//            }else if(video.getNumber()==0){
//                qw.orderByAsc(Video::getNumber);
//            }
//        }
//        //判断是否需要根据时长排序
//        if (video.getDuration()!=null){
//            if(video.getDuration()==1){
//                qw.orderByDesc(Video::getDuration);
//            }else if(video.getDuration()==0){
//                qw.orderByAsc(Video::getDuration);
//            }
//        }
//        //判断是否需要根据时间排序
//        if (video.getCreateTimeSort()!=null){
//            if(video.getCreateTimeSort()==1){
//                qw.orderByDesc(Video::getCreateTime);
//            }else if(video.getCreateTimeSort()==0){
//                qw.orderByAsc(Video::getCreateTime);
//            }
//        }else {
//            qw.orderByDesc(Video::getCreateTime);
//        }
//
//        //根据角色查询
//        IPage<Video> page = new Page(currentPage, pageSize);
//        //分页条件查询
//        videoMapper.selectPage(page, qw);
//
//        for (Video record : page.getRecords()) {
//            record.setSetTitle(videoSetMapper.selectById(record.getSetId()).getSetTitle());
//        }
//        return page;
//    }
//
//    //添加
//    @Override
//    public Boolean add(Video video) {
//        //注入创建时间
//        video.setCreateTime(new Date());
//        //获取视频时长 秒
//        String filePath = video.getVideo();
//        if(filePath != null && filePath != "") {
//            int index = filePath.indexOf("name=");
//            if (index!= -1) {
//                String videoFilePath =  basePath + filePath.substring(index + "name=".length());
//                int duration = getVideoDuration(videoFilePath);
//                video.setDuration(duration);
//            }
//        }else {
//            video.setDuration(0);
//        }
//        //添加视频
//        Boolean flag = videoMapper.insert(video) > 0;
//
//        //如果添加成功 则更新合集的时长
//        if (flag){
//            //获取当前视频的合集
//            VideoSet videoSet = videoSetMapper.selectById(video.getSetId());
//            //更新合集时长
//            videoSet.setTotalDuration(videoSet.getTotalDuration() + video.getDuration());
//            //更新更新时间
//            videoSet.setUpdateTime(new Date());
//            //更新合集表数据
//            videoSetMapper.updateById(videoSet);
//        }
//        return flag;
//    }
//
//    //根据id修改
//    @Override
//    public Boolean renewById(Video video) {
//        //获取原视频文件
//        Video oldVideo = videoMapper.selectById(video.getId());
//        //判断原视频和新视频是否相同
//        if(!oldVideo.getVideo().equals(video.getVideo())){
//            //获取视频时长
//            String filePath = video.getVideo();
//            if(filePath != null && filePath != ""){
//                String videoFilePath =  basePath + filePath.substring(filePath.indexOf("name=") + "name=".length());
//                int duration = getVideoDuration(videoFilePath);
//                video.setDuration(duration);
//            }else {
//                video.setDuration(0);
//            }
//
//            //获取视频合集对象
//            VideoSet videoSet = videoSetMapper.selectById(video.getSetId());
//            //更新合集时长
//            videoSet.setTotalDuration(videoSet.getTotalDuration() - oldVideo.getDuration() + video.getDuration());
//            //更新更新时间
//            videoSet.setUpdateTime(new Date());
//            //更新视频信息
//            videoMapper.updateById(video);
//            //更新合集信息
//            videoSetMapper.updateById(videoSet);
//        }
//
//        return true;
//    }
//
//    //根据id删除
//    public Boolean deleteById(Integer id){
//        Video video = videoMapper.selectById(id);
//        Boolean flag = videoMapper.deleteById(id) > 0;
//        if (flag){
//            VideoSet videoSet = videoSetMapper.selectById(video.getSetId());
//            videoSet.setTotalDuration(videoSet.getTotalDuration() - video.getDuration());
//            videoSetMapper.updateById(videoSet);
//        }
//        return flag;
//    }
//
//    //根据合集id查询所有视频
//    @Override
//    public List<Video> getBySid(Integer setId) {
//        return videoMapper.getBySid(setId);
//    }
//
//    //计算视频文件时长
//    public static int getVideoDuration(String filePath) {
//        try {
//            FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(new File(filePath));
//            grabber.start();
//            int duration = (int) (grabber.getLengthInTime() / (1000 * 1000)); // 将时间单位从微秒转换为秒
//            grabber.stop();
//            return duration;
//        } catch (IOException e) {
//            e.printStackTrace();
//            return -1; // 如果获取失败，返回-1等标识值，可按需调整
//        }
//    }
//}
